<?php

namespace Medicina\KernelBundle\Entity;

use Doctrine\ORM\EntityRepository;

class ConcursoRepository extends EntityRepository {

     public function deleteByConcurso($IdConcurso) {
        $em = $this->getEntityManager();
        $query = $em->createQuery('
                        DELETE FROM MedicinaKernelBundle:PersonaOcupaCargo p
                        WHERE p.concurso_id = :IdConcurso
                        ');
        $query->setParameter('IdConcurso', $IdConcurso);

       // die($query->getSQL());
        $query->execute();
    }
    
    public function cargosParaCatedra($catedra_id) {
        $em = $this->getEntityManager();

        $consulta = $em->createQuery('
            SELECT o
            FROM Medicina:KernelBundle:Cargo o 
            WHERE o.catedra_id = :id
            ORDER BY o.codigo DESC
        ');
        $consulta->setParameter('id', $catedra_id);
        $consulta->useResultCache(true, 3600);
        return $consulta->getResult();
    }

    public function concursosParaCatedra($catedra_id) {
        $em = $this->getEntityManager();

        $consulta = $em->createQuery('
            SELECT c
            FROM MedicinaKernelBundle:Concurso c 
            WHERE c.catedra = :id
            ORDER BY c.numeroExpediente DESC
        ');
        $consulta->setParameter('id', $catedra_id);
        $consulta->useResultCache(true, 3600);
        return $consulta->getResult();
    }

    public function concursosParaTipodecargo($tipodecargoId) {
        $em = $this->getEntityManager();

        $consulta = $em->createQueryBuilder()
                ->select('c')
                ->from('\Medicina\KernelBundle\Entity\Concurso', 'c')
                ->innerJoin('c.catedra', 'cat')
                ->innerJoin('c.cargos', 'car')
                ->innerJoin('car.tipoDeCargo', 'tdc')
                ->where('tdc.id = :tipodecargoId')
                ->setParameter('tipodecargoId', $tipodecargoId)
                ->getQuery();
        return $consulta->getResult();

        $consulta->useResultCache(true, 3600);
        return $consulta->getResult();
    }

    public function getConcursoByExpediente($expediente) {
        $em = $this->getEntityManager();

        $consulta = $em->createQuery('
            SELECT c
            FROM MedicinaKernelBundle:Concurso c 
            WHERE c.numeroExpediente = :expediente
           
        ');
        $consulta->setParameter('expediente', $expediente);
        #$consulta->useResultCache(true, 3600);#}
        return $consulta->getResult();
    }

    public function findAllOrderedByFechaInicio() {
        return $this->getEntityManager()
                        ->createQuery('SELECT c FROM MedicinaKernelBundle:Concurso c  ORDER BY c.fechaInicioExpediente ASC')
                        ->getResult();
    }

    //personas inscriptas que ganaron un concurso

    public function inscriptosGanadores($concursoId) {
        $em = $this->getEntityManager();

        $consulta = $em->createQueryBuilder()
                ->select('pi')
                ->from('\Medicina\KernelBundle\Entity\PersonaInscripta', 'pi')
                ->innerJoin('pi.persona', 'p')
                ->where('pi.gano = 1 and pi.concurso =:id')
                ->setParameter('id', $concursoId)
                ->getQuery();
        return $consulta->getResult();
    }

//personas inscriptas aceptadas

    public function inscriptosAceptados($concursoId) {
        $em = $this->getEntityManager();

        $consulta = $em->createQueryBuilder()
                ->select('pi')
                ->from('\Medicina\KernelBundle\Entity\PersonaInscripta', 'pi')
                ->innerJoin('pi.persona', 'p')
                ->where('pi.aceptado = 1 and pi.concurso =:id')
                ->setParameter('id', $concursoId)
                ->getQuery();
        return $consulta->getResult();
    }

//personas inscriptas rechazadas

    public function inscriptosRechazados($concursoId) {
        $em = $this->getEntityManager();

        $consulta = $em->createQueryBuilder()
                ->select('pi')
                ->from('\Medicina\KernelBundle\Entity\PersonaInscripta', 'pi')
                ->innerJoin('pi.persona', 'p')
                ->where('pi.aceptado = 0 and pi.concurso =:id')
                ->setParameter('id', $concursoId)
                ->getQuery();
        return $consulta->getResult();
    }

    public function getConcursoByCriterias($data) {
        $em = $this->getEntityManager();
        $exp = $data->getNumeroExpediente();
        $catedra = $data->getCatedra();
        $fechaIniDesde = $data->getVirtualSearchFechaDesde();
        $fechaIniHasta = $data->getVirtualSearchFechaHasta();

        if ($exp == "") {
            $exp = '\'zzzz\'';
        }
        if ($catedra == "") {
            $catedra = '\'zzzz\'';
        } else {
            $catedra = '\'%' . $catedra . '%\'';
        }
        if ($fechaIniDesde == "") {
            $fechaIniDesde = '\'zzzz\'';
        } else {
            $fechaIniDesde = $fechaIniDesde->format('Y-m-d');
        }
        if ($fechaIniHasta == "") {
            $fechaIniHasta = '2200-12-31';
        } else {
            $fechaIniHasta = $fechaIniHasta->format('Y-m-d');
        }
        $varAux = '\'zzzz\'';
        $consulta = $em->createQueryBuilder()
                ->select('c')
                ->from('\Medicina\KernelBundle\Entity\Concurso', 'c')
                ->innerJoin('c.catedra', 'cat')
                ->where('( c.numeroExpediente = ' . $exp . ' or ' . $exp . ' = ' . $varAux . ')')
                ->andWhere(' (cat.nombre like ' . $catedra . ' or ' . $catedra . ' = ' . $varAux . ')')
                ->andwhere(' (c.fechaInicioExpediente >= :fechaDesde or  :fechaDesde =' . $varAux . ')')
                ->andwhere(' (c.fechaInicioExpediente <= :fechaHasta )')
                ->orderBy('c.numeroExpediente', 'ASC')
                ->setParameters(array('fechaDesde' => $fechaIniDesde, 'fechaHasta' => $fechaIniHasta))
                ->getQuery();

        return $consulta->getResult();
    }

    public function getAllAsesores($concursoId) {
        $em = $this->getEntityManager();
        $consulta = $em->createQueryBuilder()
                ->select('pa')
                ->from('\Medicina\KernelBundle\Entity\PersonaAsesora', 'pa')
                ->innerJoin('pa.persona', 'p')
                ->where('pa.concurso =:id')
                ->orderBy('p.apellido')
                ->groupBy('pa.tipoAsesor')
                ->setParameter('id', $concursoId)
                ->getQuery();
        return $consulta->getResult();
    }

    public function checkCargos($id, $values) {

        $em = $this->getEntityManager();

        $qb = $em->createQueryBuilder()
                ->select('c.codigo, con.numeroExpediente')
                ->from('\Medicina\KernelBundle\Entity\Cargo', 'c')
                ->innerJoin('c.concursos', 'con')
                ->where('con.cerrado <> 1')
                ->andWhere('c.id IN (:codigos)');
       
            $qb->andWhere('con.id <> :id');
            $qb->setParameter('id',$id);
  

        $qb->setParameter('codigos', explode(",", $values));
       //     ->getQuery();
//$query = $qb->getQuery();
//print_r(array(
//    'sql'        => $query->getSQL(),
//    'parameters' => $query->getParameters(),
//));

        return $qb->getQuery()->getResult();
    }

}

?>
